home *** CD-ROM | disk | FTP | other *** search
/ FishMarket 1.0 / FishMarket v1.0.iso / fishies / 301-325 / disk_319 / cnewssrc / cnews.orig.lzh / batch / sendbatches < prev    next >
Text File  |  1989-06-27  |  3KB  |  172 lines

  1. #! /bin/sh
  2. # Master batching control.
  3.  
  4. # =()<. ${NEWSCONFIG-@<NEWSCONFIG>@}>()=
  5. . ${NEWSCONFIG-/usr/lib/news/bin/config}
  6.  
  7. PATH=$NEWSCTL/bin:$NEWSBIN/batch:$NEWSBIN:$NEWSPATH ; export PATH
  8. umask $NEWSUMASK
  9.  
  10. origpath="$PATH"
  11.  
  12. parms=$NEWSCTL/batchparms
  13. log=$NEWSCTL/batchlog        # also same with suffixes .o and .oo
  14.  
  15. # lock against multiple simultaneous execution
  16. lock="$NEWSCTL/LOCKbatch"
  17. ltemp="$NEWSCTL/L.$$"
  18. echo $$ >$ltemp
  19. trap "rm -f $ltemp ; exit 0" 0 1 2 15
  20. if newslock $ltemp $lock
  21. then
  22.     trap "rm -f $ltemp $lock ; exit 0" 0 1 2 15
  23. else
  24.     exit 0
  25. fi
  26.  
  27. cd $NEWSARTS/out.going
  28.  
  29. # Determine what systems are being requested, in what order.
  30. case "$1"
  31. in
  32.     -d)
  33.     debug=yes
  34.     shift
  35.     ;;
  36. esac
  37. case $#
  38. in
  39.     0)
  40.     if egrep '^/default/[     ]' $parms >/dev/null    # default line found
  41.     then
  42.         syses=`ls -tr | egrep -v '^[@.]'`    # oldest first
  43.     else
  44.         syses="`egrep '^[^/#]' $parms | awk '{ print $1 }'`"
  45.     fi
  46.     ;;
  47.  
  48.     *)
  49.     syses="$*"
  50.     ;;
  51. esac
  52. case $debug
  53. in
  54.     yes)
  55.     for sys in $syses
  56.     do
  57.         echo $sys
  58.     done
  59.     exit 0
  60.     ;;
  61. esac
  62.  
  63. # Start up logging.
  64. mv $log.o $log.oo
  65. mv $log $log.o
  66. date >$log
  67.  
  68. # Run through them.
  69. for sys in $syses
  70. do
  71.     # Move into his directory, include it in search path.
  72.     here=$NEWSARTS/out.going/$sys
  73.     if test ! -d $here
  74.     then
  75.         echo "$0: cannot find batch directory for \`$sys'" >>$log
  76.         continue
  77.     fi
  78.     cd $here
  79.     PATH=$here:$origpath ; export PATH
  80.     NEWSSITE=$sys ; export NEWSSITE        # For site-specific programs.
  81.  
  82.     # Is there anything to do?
  83.     files=`echo togo*`
  84.     if test "$files" = 'togo*' || test "$files" = "togo" -a ! -s togo
  85.     then
  86.         continue            # no
  87.     fi
  88.  
  89.     # Pick up the batchparms line.
  90.     ctlline="`egrep \"^$sys[     ]\" $parms | sed 1q`"
  91.     if test " $ctlline" = " "
  92.     then
  93.         ctlline="`egrep '^/default/[     ]' $parms | sed 1q`"
  94.     fi
  95.     set $ctlline
  96.     if test " $#" -ne 6
  97.     then
  98.         echo "$0: bad or missing batchparms line for \`$sys'" >>$log
  99.         continue
  100.     fi
  101.     batchsize=$2
  102.     limit=$3
  103.     batcher=$4
  104.     muncher=$5
  105.     sender=$6
  106.  
  107.     # How many to send?
  108.     outstand=`queuelen $sys`
  109.     nbatch=`expr $limit - $outstand`
  110.     roomfor=`spacefor $batchsize outbound $sys`
  111.     if test " $nbatch" -gt " $roomfor"
  112.     then
  113.         nbatch=$roomfor
  114.     fi
  115.  
  116.     # If not allowed to send, remember reason.
  117.     status='batches flowing'
  118.     if test " $nbatch" -le 0
  119.     then
  120.         if test " $roomfor" -le 0
  121.         then
  122.             status='disk too full for batching'
  123.         else
  124.             status='queue full, no recent movement'
  125.         fi
  126.     fi
  127.  
  128.     # Try sending some.
  129.     while test " $nbatch" -gt 0
  130.     do
  131.         # Does he have batches prepared already?
  132.         if test "`echo togo.[0-9]`" = 'togo.[0-9]'
  133.         then
  134.             # No -- need some more batches.
  135.             if test ! -s togo && test ! -s togo.next
  136.             then
  137.                 break        # Nothing left to do.
  138.             fi
  139.             batchsplit $batchsize
  140.         fi
  141.  
  142.         # Send some batches.
  143.         them=`ls | egrep '^togo\.[0-9]' | sed "${nbatch}q"`
  144.         for f in $them
  145.         do
  146.             if $batcher -d $NEWSARTS $f | $muncher | $sender $sys
  147.             then
  148.                 rm $f
  149.             else
  150.                 echo "$0: batching for \`$sys' failed" >>$log
  151.                 exit 1
  152.             fi
  153.         done
  154.         ndone=`echo $them | wc -w`
  155.         nbatch=`expr $nbatch - $ndone`
  156.  
  157.         # Recheck the space -- it can fall for other reasons.
  158.         roomfor=`spacefor $batchsize outbound $sys`
  159.         if test " $nbatch" -gt " $roomfor"
  160.         then
  161.             nbatch=$roomfor
  162.         fi
  163.     done
  164.  
  165.     # Report status, if appropriate.
  166.     nart=`cat togo* | wc -l | awk '{print $1}'`
  167.     if test " $nart" -gt 0
  168.     then
  169.         echo "$sys    backlog $nart ($status)" >>$log
  170.     fi
  171. done
  172.